﻿using System;
using System.Linq;
using System.Web.Mvc;
using System.Reflection;
using System.Diagnostics;

namespace Flagwind.Web
{
	internal static class Utility
	{
		/// <summary>
		/// 判断当前请求是否为 API 请求。
		/// </summary>
		/// <param name="context">异常上下文。</param>
		/// <returns>如果是 API 请求则为 true， 否则为 false。</returns>
		public static bool IsApiRequest(ExceptionContext context)
		{
			// 验证 DataToken 是否为 API。
			if((bool)context.RouteData.DataTokens["api"])
				return true;

			// 获取 Action 返回类型。
			var actionMethod = new StackTrace(context.Exception).GetFrames().FirstOrDefault(f => typeof(IController).IsAssignableFrom(f.GetMethod().DeclaringType)).GetMethod();
			var returnType = ((MethodInfo)actionMethod).ReturnType;

			return typeof(ApiResult).IsAssignableFrom(returnType);
		}
	}
}
